package br.com.universidade.bean;

import java.util.ArrayList;
import java.util.List;

import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.JoinTable;
import javax.persistence.ManyToMany;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;
import javax.persistence.Table;

@Table(name="Materia")
@Entity
public class Materia {
	
	@GeneratedValue
	@Id
	@Column(name="idMateria")
	private int id;
	private String nome;
	private String descricao;
	
	@ManyToOne(fetch=FetchType.EAGER)
	@JoinColumn(name="professor_id",insertable=false,updatable=false)
	private Professor professor;
	
	@OneToMany(cascade= CascadeType.ALL)
	@JoinTable(name="alunomatriculado" ,
		joinColumns={@JoinColumn(name="idMateria",nullable=false,updatable=true)},
		inverseJoinColumns={@JoinColumn(name="idAluno",nullable=false,updatable=true)}	
	)
	private List<Aluno> alunosMatriculados;
	

	public void setAlunosMatriculados(ArrayList<Aluno> alunosMatriculados) {
		this.alunosMatriculados = alunosMatriculados;
	}

	public Materia() {

	}
	
	public Materia(int id, String nome, String descricao, Professor professor) {
		this.id = id;
		this.nome = nome;
		this.descricao = descricao;
		this.professor = professor;
		this.alunosMatriculados = new ArrayList<Aluno>();
	}

	public Materia(String nome, String descricao, Professor idProfessor) {
		this.nome = nome;
		this.descricao = descricao;
		this.professor = idProfessor;
		this.alunosMatriculados = new ArrayList<Aluno>();
	}
	public int getId() {
		return id;
	}
	
	public void setId(int id) {
		this.id = id;
	}

	public String getNome() {
		return nome;
	}

	public void setNome(String nome) {
		this.nome = nome;
	}

	public String getDescricao() {
		return descricao;
	}

	public void setDescricao(String descricao) {
		this.descricao = descricao;
	}

	public Professor getProfessor() {
		return professor;
	}

	public List<Aluno> getAlunosMatriculados() {
		return alunosMatriculados;
	}

	public void setAlunosMatriculados(List<Aluno> alunosMatriculados) {
		this.alunosMatriculados = alunosMatriculados;
	}

	public void setProfessor(Professor professor) {
		this.professor = professor;
	}

	
}
